home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM 1995 Fall / PD-ROM F95.toast / Programming / Programming Languages / UCB Logo 3.0 ƒ / sources / standard source / xgraphics.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-04  |  5.6 KB  |  181 lines  |  [TEXT/ttxt]

  1. /* X window system graphics header file. */
  2.  
  3. #include <memory.h>
  4. #include <X11/Xlib.h>
  5. #include <X11/Xutil.h>
  6.  
  7. extern int have_x;
  8.  
  9. #define checkX {if (have_x < 0) real_window_init(); \
  10.         if (!have_x) {err_logo(BAD_GRAPH_INIT,NIL);return;}}
  11.  
  12. /* Some X-related defines. */
  13. #define BORDER    1
  14. #define FONT    "fixed"
  15. #define NUMCOLORS 16
  16. #define EVENT_MASK  (StructureNotifyMask | PointerMotionMask)
  17. #define DEFAULT_HEIGHT           500
  18. #define DEFAULT_WIDTH            500
  19.  
  20. #define GR_SIZE         1
  21.  
  22. #define prepare_to_draw          {checkX; placate_x();}
  23. #define done_drawing             XFlush(dpy)
  24.  
  25. #define prepare_to_draw_turtle nop()
  26. #define done_drawing_turtle nop()
  27.  
  28. #define screen_left              0
  29. #define screen_right             screen_width
  30. #define screen_top               0
  31. #define screen_bottom            screen_height
  32.  
  33. #define turtle_left_max          (-(screen_width/2))
  34. #define turtle_right_max         (screen_width/2)
  35. #define turtle_top_max           (screen_height/2)
  36. #define turtle_bottom_max        (-(screen_height/2))
  37.  
  38. #define turtle_height 18
  39. #define turtle_half_bottom 6.0
  40. #define turtle_side 19.0
  41.  
  42. #define screen_x_coord           (screen_width/2.0) + turtle_x
  43. #define screen_y_coord           (screen_height/2.0) - turtle_y
  44.  
  45. #define clear_screen         checkX;\
  46.                  XClearWindow(dpy, win);\
  47.                                  XFlush(dpy)
  48.  
  49. #define line_to(a,b)             checkX;\
  50.                  if(orig_pen.vis==0)\
  51.                                  XDrawLine(dpy,win,orig_pen.pm,\
  52.                                  orig_pen.xpos,orig_pen.ypos,\
  53.                                  (a),(b));\
  54.                                  orig_pen.xpos=(a);\
  55.                                  orig_pen.ypos=(b)
  56.  
  57. #define move_to(a,b)             checkX;\
  58.                                  orig_pen.xpos=(a);\
  59.                                  orig_pen.ypos=(b)
  60.  
  61. #define draw_string(s)           checkX;\
  62.                                  XDrawString(dpy,win,orig_pen.pm,\
  63.                                  orig_pen.xpos,orig_pen.ypos,\
  64.                                  (s),strlen((s)));
  65.  
  66. #define set_pen_vis(v)           orig_pen.vis=(v)
  67.  
  68. #define set_pen_mode(m)          orig_pen.pm=(m)
  69.  
  70. #define set_pen_color(c)         checkX;\
  71.                                  if(turtle_shown)\
  72.                                    draw_turtle();\
  73.                                  orig_pen.color=c%NUMCOLORS;\
  74.                                  XSetForeground(dpy,draw_gc,color[orig_pen.color].pixel);\
  75.                                  XSetForeground(dpy,reverse_gc,color[orig_pen.color].pixel);\
  76.                                  if(turtle_shown)\
  77.                                    draw_turtle();
  78.  
  79. #define set_back_ground(c)     nop()
  80. #define set_pen_width(w)         nop()
  81. #define set_pen_height(h)        nop()
  82. #define set_pen_x(x)             nop()
  83. #define set_pen_y(y)             nop()
  84.  
  85. /* pen_info is a stucture type with fields for the various
  86.    pen characteristics including the location, size, color,
  87.    mode (e.g. XOR or COPY), pattern, visibility (0 = visible) */
  88.  
  89. typedef struct {
  90.   int color;
  91.   int xpos;
  92.   int ypos;
  93.   int vis;
  94.   int pw;
  95.   int ph;
  96.   GC  pm;
  97. } pen_info;
  98.  
  99. #define p_info_x(p)              (p.xpos)
  100. #define p_info_y(p)              (p.ypos)
  101.  
  102. /* All these should take an argument, like the two just above.
  103.    Then we could support multiple turtles.
  104.  */
  105.  
  106. #define pen_width                orig_pen.pw
  107. #define pen_height               orig_pen.ph
  108. #define pen_color                orig_pen.color
  109. #define pen_mode                 orig_pen.pm
  110. #define pen_vis                  orig_pen.vis
  111. #define pen_x                    px
  112. #define pen_y                    py
  113. #define get_node_pen_pattern     make_intnode(0)
  114. #define get_node_pen_mode        Get_node_pen_mode(orig_pen.pm)
  115.  
  116. #define back_ground         0
  117.  
  118. #define pen_reverse              pen_mode=reverse_gc
  119. #define pen_erase                pen_mode=erase_gc
  120. #define pen_down                 pen_mode=draw_gc
  121.  
  122. /* Hmn, buttons are a problem, aren't they? */
  123. #define button                   FALSE
  124. #define mouse_x                  get_mouse_x()
  125. #define mouse_y                  get_mouse_y()
  126.  
  127. /* There seems little point in implementing these unless we put
  128.    everything in one window.  (Possibly use a slave xterm?)
  129.  */
  130. #define full_screen              nop()
  131. #define split_screen             nop()
  132. #define text_screen              nop()
  133.  
  134. #define save_pen(p)              memcpy(((char *)(p)),((char *)(&orig_pen)),sizeof(pen_info))
  135. #define restore_pen(p)           memcpy(((char *)(&orig_pen)),((char *)(p)),sizeof(pen_info))
  136.  
  137. #define plain_xor_pen()          pen_reverse
  138.  
  139. #define label(s, len)            checkX;\
  140.                                  XDrawString(dpy,win,orig_pen.pm,\
  141.                                  orig_pen.xpos,orig_pen.ypos,\
  142.                                  (s), (len))
  143.  
  144. #define tone(p,d)                nop()
  145. #define get_pen_pattern(p)       nop()
  146. #define set_pen_pattern(p)       nop()
  147. #define set_list_pen_pattern(p)  nop()
  148.  
  149. /* The sparc has fmod.  So I use it. */
  150. /* #define fmod(x,y)                x */
  151.  
  152.  
  153. extern int px, py;
  154. extern double degrad;
  155. extern void nop();
  156.  
  157. /* Global X variables. */
  158. extern int screen_height, screen_width;
  159.  
  160. extern Display    *dpy;        /* X server connection */
  161. extern Window      win;        /* Window ID */
  162. extern GC          draw_gc,     /* GC to draw with */
  163.                    erase_gc,    /* GC to draw with */
  164.                    reverse_gc;  /* GC to draw with */
  165.  
  166. extern XColor color[16];
  167. extern XColor dummy;
  168.  
  169. extern NODE * Get_node_pen_mode();
  170.  
  171. extern int get_mouse_x(), get_mouse_y();
  172.  
  173.  
  174. /* Avoid name conflicts.  Note: if xgraphics.c uses True and
  175.    False, bad things are likely to happen.
  176.  */
  177. #undef True
  178. #undef False
  179.  
  180.  
  181.